//microcommand define -jz-xiaoliuren
const { Temporal } = require("temporal-polyfill")
signature("", {checkArgCount: true, checkUnknown: true})
option("zone", "-z <zone:string>")
option("numbers", "-n <numstr:string>")
action(({ session, options }) => {
    const x6rGua = [
        "【大安】\n意象：静止、心安\n五行：木（青色、东方）\n六神：青龙\n谋事：主一、五、七\n征兆：占得大安，多主吉祥，求财宜向西南方，失物易寻，家宅平安，行人未动，病人无碍。\n口诀：\n大安事事昌，求谋在东方，\n失物去不远，宅舍保安康。\n行人身未动，病者主无妨，\n将军回田野，仔细更推详。",
        "【留连】\n意象：延迟、纠缠\n五行：水（黑色、北方）\n六神：玄武\n谋事：主二、八、十\n征兆：占得留连，多主事情难成，求谋不明，官事宜缓，行人未归，失物可能在南方，需急寻，同时需防口舌是非。\n口诀：\n留连事难成，求谋日未明，\n官事只宜缓，去者未回程。\n失物南方见，急讨方称心，\n更须防口舌，人口且平平。",
        "【速喜】\n意象：快速、喜庆\n五行：火（赤色、南方）\n六神：朱雀\n谋事：主三、六、九\n征兆：占得速喜，多主有喜事来临，求财宜向南方，失物可能在西南方或南方，路上易寻，官事有福，病人无碍，家宅六畜皆吉。\n口诀：\n速喜喜来临，求财向南行，\n失物申未午，逢人路上寻。\n官事有福德，病者无祸侵，\n田宅六畜吉，行人有音信。",
        "【赤口】\n意象：不吉、惊恐\n五行：金（白色、西方）\n六神：白虎\n谋事：主四、七、十\n征兆：占得赤口，多主有口舌是非，官事需防，失物需急寻，行人可能有灾，同时需防鸡犬作怪和疾病传染。\n口诀：\n赤口主口舌，官非切要防，\n失物急去寻，行人有灾殃。\n鸡犬多作怪，病者出西方，\n更须防咀咒，诚恐染瘟殃。",
        "【小吉】\n意象：和合、吉利\n五行：木（青色、东方）\n六神：六合\n谋事：主一、五、七\n征兆：占得小吉，多主事情顺利，路上易遇贵人相助，失物可能在西南方，行人将至，交易和合，病人需祈求上苍保佑。\n口诀：\n小吉最吉昌，路上好商量，\n阴人来报喜，失物在坤方。\n行人即便至，交关甚是强，\n凡事皆和合，病者祈上苍。",
        "【空亡】\n意象：不吉、无果\n五行：土（黄色、中央）\n六神：勾陈\n谋事：主三、六、九\n征兆：占得空亡，多主事情不顺，求财无利，行人可能有灾，失物难寻，官事有刑伤，病人需禳解以保安康。\n口诀：\n空亡事不祥，阴人多乖张，\n求财无利益，行人有灾殃。\n失物寻不见，官事有刑伤，\n病人逢暗鬼，禳解保安康。",
    ]
    if (!!options.numbers) {
        let count = 0;
        let sum = 0;
        for (let i = 0; i < options.numbers.length; i++) {
            let c = options.numbers.charCodeAt(i);
            if (c >= 49 && c <= 57) {
                count += 1;
                sum += c - 49;
            }
            if (count >= 3) break;
        }
        return x6rGua[sum % 6];
    }
    else {
        let timeZone = '+08:00';
        if (!!options.zone) timeZone = options.zone;
        let now = Temporal.Now;
        let dateTime = undefined;
        try {
            dateTime = now.zonedDateTimeISO(timeZone);
        }
        catch (e) {
            if (e instanceof RangeError)
                return session.i18n(".zone-format");
            else
                return session.i18n(".error");
        }
        let date = now.plainDateISO().withCalendar('chinese');
        let mStep = parseInt(date.monthCode.slice(1)) - 1;
        let dStep = date.day - 1;
        let hStep = Math.floor((dateTime.hour + 1) / 2) % 12;
   if (!hStep) return session.i18n(".rat-time");
        return x6rGua[(mStep + dStep + hStep) % 6];
    }
})
locale("zh-CN", { description: "小六壬起卦",
    options: {
        zone: "时区，格式可仿照+08（东八区）或-04:25（西4h25min区）。请按照地区时区为准，如豫鄂湘粤用户宜使用+07:30，川渝用户宜使用+07:00。默认为东八区。",
        numbers: "用数字起卦而非时间起卦。连续输入三个1-9的数字即可，无需用空格分隔。不使用该选项时默认为时间起卦。",
    },
    messages: {
        error: "未知错误...",
        "zone-format": "时区格式错误...",
        "rat-time": "子时不占...",
    }
})